/// # 控制寄存器
/// write_mscratch(val : usize);
/// read_mscratch(val : usize);
/// 2022年10月31日 zgg

extern crate macro_derive;
use macro_derive::generate_write_csr_fn;
use macro_derive::generate_read_csr_fn;
use core::arch::asm;

// m mode
generate_write_csr_fn!(mhartid);
generate_write_csr_fn!(mepc);
generate_write_csr_fn!(mcause);
generate_write_csr_fn!(mideleg);
generate_write_csr_fn!(mie);
generate_write_csr_fn!(mip);
generate_write_csr_fn!(mscratch);
generate_write_csr_fn!(mstatus);
generate_write_csr_fn!(mtvec);

// s mode
generate_write_csr_fn!(satp);
generate_write_csr_fn!(scause);
generate_write_csr_fn!(sepc);
generate_write_csr_fn!(sie);
generate_write_csr_fn!(sip);
generate_write_csr_fn!(sscratch);
generate_write_csr_fn!(sstatus);
generate_write_csr_fn!(stvec);


// m mode
generate_read_csr_fn!(mhartid);
generate_read_csr_fn!(mepc);
generate_read_csr_fn!(mcause);
generate_read_csr_fn!(mideleg);
generate_read_csr_fn!(mie);
generate_read_csr_fn!(mip);
generate_read_csr_fn!(mscratch);
generate_read_csr_fn!(mstatus);
generate_read_csr_fn!(mtvec);

// s mode
generate_read_csr_fn!(satp);
generate_read_csr_fn!(scause);
generate_read_csr_fn!(sepc);
generate_read_csr_fn!(sie);
generate_read_csr_fn!(sip);
generate_read_csr_fn!(sscratch);
generate_read_csr_fn!(sstatus);
generate_read_csr_fn!(stvec);